package org.jiuling.local.tools.verify;

import org.jiuling.local.tools.exception.LocalToolsRuntimeException;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 断言
 * @author 紫灵
 * @date 2021年09月09日 11时02分23秒
 */
@Deprecated
public class Assertions {

    /** 私有构造方法，禁止创建对象 */
    private Assertions() {}

    /**
     * 对象是空
     * @param obj 对象
     * @param msg 信息
     */
    public static void objectIsNull(String msg,Object obj) throws LocalToolsRuntimeException {
        isTrue(msg,ObjectVerify.isNull(obj));
    }

    /**
     * 对象是非空
     * @param obj 对象
     * @param msg 信息
     */
    public static void objectIsNotNull(String msg,Object obj) throws LocalToolsRuntimeException {
        isNotTrue(msg,ObjectVerify.isNull(obj));
    }

    /**
     * Map集合不为空
     * @param msg 信息
     * @param map Map集合
     */
    public static void mapIsNotNull(String msg, Map map){
        isNotTrue(msg,MapVerify.isNull(map));
    }

    /**
     * Map为空
     * @param msg 信息
     * @param map Map集合
     */
    public static void mapIsNull(String msg, Map map){
        isTrue(msg,MapVerify.isNull(map));
    }

    /**
     * 断言为True，如果不为true则断言失败
     * @param param 布尔类型参数
     * @param msg 异常信息
     */
    public static void isTrue(String msg,boolean param ) throws LocalToolsRuntimeException {
        if(!param){
            throw new LocalToolsRuntimeException(msg);
        }
    }

    /**
     * 断言不为True，如果为true则断言失败
     * @param param 布尔类型参数
     * @param msg 异常信息
     */
    public static void isNotTrue(String msg,boolean param ) throws LocalToolsRuntimeException {
        if(param){
            throw new LocalToolsRuntimeException(msg);
        }
    }

    /**
     * 字符串为空
     * @param str 字符串
     * @param msg 信息
     */
    public static void stringIsBlank(String msg,String str) throws LocalToolsRuntimeException {
        isTrue(msg,StringVerify.isBlank(str));
    }

    /**
     * 字符串不为空
     * @param str 字符串
     * @param msg 信息
     */
    public static void stringIsNotBlank(String msg,String str) throws LocalToolsRuntimeException {
        isNotTrue(msg,StringVerify.isBlank(str));
    }

    /**
     * 字符串全部为空
     * @param msg 信息
     * @param strs 字符串
     */
    public static void stringAllIsBlank(String msg,String... strs) throws LocalToolsRuntimeException {
        isTrue(msg,StringVerify.allIsBlank(strs));
    }

    /**
     * 字符串并非全部为空
     * @param msg 信息
     * @param strs 字符串
     */
    public static void stringNotAllIsBlank(String msg,String... strs) throws LocalToolsRuntimeException {
        isNotTrue(msg,StringVerify.allIsBlank(strs));
    }

    /**
     * 字符串全部存在
     * @param msg 信息
     * @param strs 字符串
     */
    public static void stringAllIsExist(String msg,String... strs){
        isTrue(msg,StringVerify.allIsExist(strs));
    }

    /**
     * 字符串并非全部存在
     * @param msg 消息
     * @param strs 字符串
     */
    public static void stringNotAllIsExist(String msg,String... strs){
        isNotTrue(msg,StringVerify.allIsExist(strs));
    }


    /**
     * 列表是空
     * @param list 列表
     * @param msg 消息
     */
    public static void listIsNull(String msg,List<?> list) throws LocalToolsRuntimeException {
        isTrue(msg,ListVerify.isEmpty(list));
    }

    /**
     * 列表不为空
     * @param list 列表
     * @param msg 消息
     */
    public static void listIsNotNull(String msg,List<?> list ) throws LocalToolsRuntimeException {
        isNotTrue(msg,ListVerify.isEmpty(list));
    }

    /**
     * 长整形为空
     * @param lon 长整形
     * @param msg 信息
     */
    public static void longIsBlank(String msg,Long lon) throws LocalToolsRuntimeException {
        isTrue(msg,LongVerify.isBlank(lon));
    }

    /**
     * 长整形为不空
     * @param lon 长整形
     * @param msg 信息
     */
    public static void longIsNotBlank(String msg,Long lon) throws LocalToolsRuntimeException {
        isNotTrue(msg,LongVerify.isBlank(lon));
    }

    /**
     * 整数为空
     * @param integer 整数
     * @param msg 信息
     */
    public static void integerIsBlank(String msg,Integer integer) throws LocalToolsRuntimeException {
        isTrue(msg,IntegerVerify.isBlank(integer));
    }

    /**
     * 整数不为空
     * @param integer 整数
     * @param msg 信息
     */
    public static void integerIsNotBlank(String msg,Integer integer) throws LocalToolsRuntimeException {
        isNotTrue(msg,IntegerVerify.isBlank(integer));
    }

    /**
     * 农历年符合条件
     * @param msg 消息
     * @param year 年份
     */
    public static void lunarYearIsEligible(String msg,Integer year) throws LocalToolsRuntimeException {
        isTrue(msg,DateVerify.lunarYearIsEligible(year));
    }

    /**
     * 农历月符合条件
     * @param msg 消息
     * @param month 月份
     */
    public static void lunarMonthIsEligible(String msg,Integer month) throws LocalToolsRuntimeException {
        isTrue(msg,DateVerify.lunarMonthIsEligible(month));
    }

    /**
     * 参数为空
     * @param msg 消息
     * @param optionalParam 可选参数
     */
    public static <T> void optionalIsEmpty(String msg,Optional<T> optionalParam) throws LocalToolsRuntimeException {
        isTrue(msg,optionalParam.isEmpty());
    }

    /**
     * 可选参数不为空
     * @param msg 消息
     * @param optionalParam 可选参数
     */
    public static <T> void optionalIsNotEmpty(String msg,Optional<T> optionalParam) throws LocalToolsRuntimeException {
        isNotTrue(msg,optionalParam.isEmpty());
    }

    /**
     * 是否为奇数
     * @param msg 提示信息
     * @param inte 整形
     */
    public static void  integerIsOddNumber(String msg,Integer inte){
        isTrue(msg,IntegerVerify.isOddNumber(inte));
    }

    /**
     * 是否不为奇数
     * @param msg 提示信息
     * @param inte 整形
     */
    public static void integerIsNotOddNumber(String msg,Integer inte){
        isNotTrue(msg,IntegerVerify.isOddNumber(inte));
    }
}
